﻿using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Ah.Testudin.Engine.Graphics
{
    public interface ITestudinRenderer
    {
        #region Properties

        RasterizerState RasterizerState { get; set; }

        BlendState BlendState { get; set; }

        DepthStencilState DepthStencilState { get; set; }

        #endregion

        #region Methods

        void Clear(Color color);

        void PreRender();

        void BeginSpriteBatch();

        void RenderSprite(
            Rectangle rectangle,
            Texture2D texture);

        void RenderString(
            SpriteFont spriteFont,
            string message,
            Vector2 position,
            Color color);

        void EndSpriteBatch();

        void DrawUserIndexedPrimitives<T>(
            PrimitiveType primitiveType,
            T[] vertexData,
            int vertexOffset,
            int vertexCount,
            int[] indexData,
            int indexOffset,
            int primitiveCount) where T : struct, IVertexType;

        void PostRender();

        #endregion
    }
}
